package com.eugene.bottomnavigationbar;

import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;

import com.ashokvarma.bottomnavigation.BadgeItem;
import com.ashokvarma.bottomnavigation.BottomNavigationBar;
import com.ashokvarma.bottomnavigation.BottomNavigationItem;

public class MainActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener {

    private BottomNavigationBar bottomNavigationBar;
    /**
     * 导航标记
     */
    private BadgeItem homeBadgeItem, newsBadgeItem;

    private FragmentManager fm;

    private HomeFragment homeFragment;
    private NewsFragment newsFragment;
    private OfficeFragment officeFragment;
    private MeFragment meFragment;

    private int curPosition;
    private int newsNum;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        setDefaultFragment();
    }

    private void initView() {
        //添加标记
        homeBadgeItem = new BadgeItem()
                //设置边框宽度
                .setBorderWidth(2)
                .setBackgroundColor(Color.RED)
                .setText("30")
                //被选中的时候时候显示   false 不显示|true 显示
                .setHideOnSelect(false);

        newsBadgeItem = new BadgeItem()
                .setBorderWidth(2)
                .setBackgroundColor(Color.RED)
                .setText("99+")
                .setHideOnSelect(true);

        bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
        /*
        * 设置模式
        * MODE_DEFAULT:
        * 如果Item的个数<=3就会使用MODE_FIXED模式，否则使用MODE_SHIFTING模式
        *
        * MODE_FIXED
        * 填充模式，未选中的Item会显示文字，没有换挡动画。
        *
        * MODE_SHIFTING
        * 换挡模式，未选中的Item不会显示文字，选中的会显示文字。在切换的时候会有一个像换挡的动画
        */
        bottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);

        /*
        * 设置背景样式
        * BACKGROUND_STYLE_DEFAULT：
        * 如果设置的Mode为MODE_FIXED，将使用BACKGROUND_STYLE_STATIC 。如果Mode为MODE_SHIFTING将使用BACKGROUND_STYLE_RIPPLE
        *
        * BACKGROUND_STYLE_STATIC
        * 点击的时候没有水波纹效果
        *
        * BACKGROUND_STYLE_RIPPLE
        * 点击的时候有水波纹效果
        */
        bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_RIPPLE);
        //注册切换监听时间
        bottomNavigationBar.setTabSelectedListener(this);
        /*
        * 添加页面
        * setInActiveColor:
        * 表示未选中Item中的图标和文本颜色。默认为 Color.LTGRAY
        *
        * setActiveColor:
        * 在BACKGROUND_STYLE_STATIC下，表示选中Item的图标和文本颜色。而在BACKGROUND_STYLE_RIPPLE下，表示整个容器的背景色。默认Theme's Primary Color
        *
        * setBackgroundColor:
        * 在BACKGROUND_STYLE_STATIC下，表示整个容器的背景色。而在BACKGROUND_STYLE_RIPPLE下，表示选中Item的图标和文本颜色。默认 Color.WHITE
        *
        * new BottomNavigationItem(R.mipmap.ic_directions_bus_white_24dp, "公交")//这里表示选中的图片
        *            .setInactiveIcon(ContextCompat.getDrawable(this,R.mipmap.ic_launcher)))//非选中的图片
        */
        bottomNavigationBar.addItem(new BottomNavigationItem(R.mipmap.home, "主页").setBadgeItem(homeBadgeItem))
                .addItem(new BottomNavigationItem(R.mipmap.news, "消息").setBadgeItem(newsBadgeItem))
                .addItem(new BottomNavigationItem(R.mipmap.office, "办公"))
                .addItem(new BottomNavigationItem(R.mipmap.me, "我"))
                //不触发事件
                .setFirstSelectedPosition(0)
                //进行渲染，所有设置属性后都需要调用该方法
                .initialise();

//        homeBadgeItem.hide();
    }

    private void setDefaultFragment() {
        fm = getSupportFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        homeFragment = (HomeFragment) Fragment.instantiate(this, HomeFragment.class.getName());
        transaction.add(R.id.ll_content, homeFragment);
        transaction.commit();
    }

    private void hideFragment(FragmentTransaction ft) {
        if (homeFragment != null) {
            ft.hide(homeFragment);
        }
        if (newsFragment != null) {
            ft.hide(newsFragment);
        }
        if (officeFragment != null) {
            ft.hide(officeFragment);
        }
        if (meFragment != null) {
            ft.hide(meFragment);
        }
    }

    public void addMessage() {
        newsNum++;
        homeBadgeItem.setText(newsNum + "");
        homeBadgeItem.show();
    }

    @Override
    public void onTabSelected(int position) {
        curPosition = position;
        FragmentTransaction ft = fm.beginTransaction();
        hideFragment(ft);
        switch (position) {
            case 0:
                if (homeFragment == null) {
                    homeFragment = (HomeFragment) Fragment.instantiate(this, HomeFragment.class.getName());
                    ft.add(R.id.ll_content, homeFragment);
                } else {
                    ft.show(homeFragment);
                }
                break;
            case 1:
                if (newsFragment == null) {
                    newsFragment = (NewsFragment) Fragment.instantiate(this, NewsFragment.class.getName());
                    ft.add(R.id.ll_content, newsFragment);
                } else {
                    ft.show(newsFragment);
                }
                break;
            case 2:
                if (officeFragment == null) {
                    officeFragment = (OfficeFragment) Fragment.instantiate(this, OfficeFragment.class.getName());
                    ft.add(R.id.ll_content, officeFragment);
                } else {
                    ft.show(officeFragment);
                }
                break;
            case 3:
                if (meFragment == null) {
                    meFragment = (MeFragment) Fragment.instantiate(this, MeFragment.class.getName());
                    ft.add(R.id.ll_content, meFragment);
                } else {
                    ft.show(meFragment);
                }
                break;
        }
        ft.commit();
    }

    @Override
    public void onTabUnselected(int position) {

    }

    @Override
    public void onTabReselected(int position) {

    }
}
